# -*- coding: utf-8 -*-

from impressao.models import *

CORTE = {
    'PARCIAL': chr(27) + chr(109),
    'TOTAL'  : chr(27) + chr(119)
}

def remove_acentos(texto, codif='utf-8'):
    '''
    Devolve cópia de uma str substituindo os caracteres 
    acentuados pelos seus equivalentes não acentuados.
    
    ATENÇÃO: carateres gráficos não ASCII e não alfa-numéricos,
    tais como bullets, travessões, aspas assimétricas, etc. 
    são simplesmente removidos!
    
    >>> remover_acentos('[ACENTUAÇÃO] ç: áàãâä! éèêë? íì&#297;îï, óòõôö; úù&#361;ûü.')
    '[ACENTUACAO] c: aaaaa! eeee? iiiii, ooooo; uuuuu.'
    
    '''
    try:
        return normalize('NFKD', texto.decode(codif)).encode('ASCII','ignore')
    except:
        return normalize('NFKD', texto).encode('ASCII','ignore')

def linha(impressora = None):
    '''
    Retorna uma linha de traços, com o número de colunas cadastrado junto da
    impressora. Caso uma impressora não seja informada, o valor padrão é 80
    '''
    if impressora:
        return '-' * impressora.colunas
    else:
        return '-' * 80

def imprime(impressora, conteudo, cabecalho = None, rodape = None, corte_total = False):
    '''
    Método que realiza uma impressão em uma impressora. O conteúdo a ser
    impresso é construído na variável "saida"
        impressora  - Uma impressora cadastrada no sistema
        conteudo    - Conteúdo a ser impresso
        cabecalho   - Caso se deseje imprimir um cabeçalho, informe nesta var.
        rodape      - Caso se deseje imprimir um rodapé, informe nesta var.
        corte_total - Caso a impressora possua corte, informe se será
            parcial ou total.
    '''
    saida = ''
    
    if cabecalho:
        cabecalho = remover_acentos(cabecalho).center(impressora.colunas)
        
        if not cabecalho.endswith('\n'):
            cabecalho += '\n'
        
        saida += cabecalho + linha(impressora) + '\n'
            
    conteudo = remove_acentos(conteudo)
    if not conteudo.endswith('\n'):
        conteudo += '\n'
    
    saida += conteudo + linha(impressora) + '\n'
            
    if rodape:
        rodape = remover_acentos(rodape).center(impressora.colunas)
        
        if not rodape.endswith('\n'):
            rodape += '\n'
        
        saida += rodape + '\n\n\n\n'
    
    if impressora.corte == True:
        if corteTotal:
            saida += CORTE['TOTAL']
        else:
            saida += CORTE['PARCIAL']
    
    if impressora != None:
        comando = 'echo "' + saida + '" | lpr -P ' + impressora.referencia
        os.system(comando)
    
     
    
    